package org.ch02.test01.demo01;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @author CSY
 * @date 2025 - 03 - 17
 */
public class BeanUtil {

    /**
     * 根据反射来调用指定类的指定方法
     * @param className 类的包名.类名
     * @param methodName 调用的方法名
     * @param objs 方法参数
     * @param types 参数的类型的Class
     */
    public static void invokeMethod(String className,String methodName,Object[] objs,Class<?> ...types){
        try {
            //获得指定类的Class对象
            Class<?> clazz = Class.forName(className);

            //根据clazz获得构造方法对象
            Constructor<?> constructor = clazz.getConstructor();

            //根据构造方法对象实例化指定类
            Object obj = constructor.newInstance();

            //根据clazz获得方法对象
            Method method = clazz.getMethod(methodName,types);

            //调用指定方法
            method.invoke(obj,objs);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}
